(in-package :com.freizl.euler-in-lisp)

"Add all the natural numbers below one thousand that are multiples of 3 or 5.
"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
(defun p1 (&optional (n 1000))
(apply
  '+
  (remove-if-not 
  (lambda (x)
	(if (or (= (mod x 3) 0) (= (mod x 5) 0)) x))
  (range 1 n))))

(defun multiples-of (n)
  (lambda (x) (if (= (mod x n) 0) t)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Simpier approach
;;; TODO
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;(format t "~a~%" (p1 1000))
